////////// Assumes this is prefixed by flyobjects.js and the inline data /////////////
//////////////////// BEGIN FLYSTYLE - POPUP window ///////////////////////////////////
var FS_WINDOW_TYPE = "POPUP";
// Pre-Load Images
PlusNormal = new Image(13,13);
PlusHover = new Image(13,13);
MinusNormal = new Image(13,13);
MinusHover = new Image(13,13);
PlusSpace = new Image(13,13);
DownNormal = new Image(15,14);
DownHover = new Image(15,14);
UpNormal = new Image(15,14);
UpHover = new Image(15,14);
PlusNormal.src = 'popup-images/plus.gif';
PlusHover.src = 'popup-images/plus.gif';
MinusNormal.src = 'popup-images/minus.gif';
MinusHover.src = 'popup-images/minus.gif';
PlusSpace.src = 'popup-images/plus-space.gif';
DownNormal.src = 'popup-images/down.gif';
DownHover.src = 'popup-images/down.gif';
UpNormal.src = 'popup-images/up.gif';
UpHover.src = 'popup-images/up.gif';
bpIcon = new Image(21,18);
flyIcon = new Image(21,18);
bpIcon.src = "popup-images/bp-icon.gif"
flyIcon.src = "popup-images/fly-icon.gif";
//get HTML for categories
var sections = new Array();
function assemblePopupSectionsHTML() {
//divide fscategories based on value of "boosterPackCategory" property
//create a sections array, which is an array of indexes in fscategories
//e.g. fscategories = (cat1, cat2, cat3, ...)
// sections = ((0,1,3), (2,6,4, ...), ...)
// grouped by boosterPackCategory
var i;
var s;
for (var cat in fscategories) {
if(fscategories[cat].boosterPackCategory) {
s = 1;
}
else {
s = 0;
}
//if a section has been started, add the cat to it
if (sections[s]) {
i = sections[s].length;
sections[s][i] = cat;
}
//otherwise, create a new section
else {
sections[s] = new Array();
sections[s][0] = cat;
}
}
var sectionsHTML = "";
var catimg;
for (var s in sections) {
if (s==1) {
catimg = bpIcon.src;
}
else {
catimg = flyIcon.src;
}
sectionsHTML += assemblePopupCatSectionHTML(sections[s], catimg);
}
return sectionsHTML;
}
function assemblePopupCatSectionHTML(catindexes, catimg) {
var sectionHTML = "";
var cattopHTML;
var cat;
for (var i in catindexes) {
cat = catindexes[i];
fscategories[cat].initializeDisplayProperties();
if (i == 0) {
cattopHTML = "
";
}
else {
cattopHTML = " |
 ";
}
cattopHTML += "" +
"";
if (fscategories.length == 1) {
cattopHTML += "";
}
cattopHTML += " ";
if (fscategories.length == 1) {
cattopHTML += "";
}
cattopHTML += " | " +
"" +
"" + fscategories[cat].name + "" +
" | " +
"" +
" " +
" | " +
" " +
" |
";
var keyHTML = "" +
"" +
" |
";
sectionHTML += cattopHTML + keyHTML;
}
var catbottomHTML = " |
"+
" |
";
sectionHTML += catbottomHTML;
return sectionHTML;
}
//HTML of all keywords under a given category (fscategories[cat])
function assemblePopupKeyListHTML(cat) {
var keylistHTML = "";
with (fscategories[cat]) {
for (var k in keywords) {
keywords[k].initializeDisplayProperties(cat,k);
keylistHTML += "" + keywords[k].name + "" +
"";
}
}
return keylistHTML;
}
function flyswat_InitializeData(name, value)
{
}
//==============================================================
// Popup Display Functions
//===============================================================
function Popup_showBrowseLinks()
{
if (fslinksenviro.isValidLinksSet) {
Popup_showValidLinksSet();
}
else {
Popup_showErrorMessage();
}
}
function Popup_showErrorMessage() {
var errorHTML = "" +
"Unable to connect for one or both of the following reasons:
" +
"" +
"- No internet connection
" +
"Please make sure you are connected to the internet." +
"
" +
"- Cannot contact our servers
" +
"Please try again in a few moments." +
" " +
"
";
document.all.FlyswatLinksTable.innerHTML = assemblePopupTableHTML(errorHTML);
}
// Display info in popup
function Popup_showValidLinksSet() {
PutCatOnBottom("GeneralKnowledge");
PutCatOnBottom("Encyclopedia");
PutCatOnBottom("Dictionary");
var fsHTML = "";
//-- Check for Original Link --//
if (underlyingLink.length > 0) {
var origlink_str = assembleOriginalLinkHTML("Original Link", setGlobalID("ORIGLINK"), underlyingLink, underlyingTarget);
fsHTML += origlink_str;
}
//-- Show Categories --//
fsHTML += assemblePopupSectionsHTML();
document.all.FlyswatLinksTable.innerHTML = assemblePopupTableHTML(fsHTML);
//-- Expand first category --//
if (fscategories.length > 0) {
var cat=0;
showhideKeyList(cat);
}
checkScrolling();
}
//==============================================================
// Popup Scrolling Functions
//===============================================================
//adds scrolling if info doesn't fit in popup window
var MAX_HEIGHT = screen.height;
var isScrolling = 0;
function checkScrolling() {
var fslinks_height = document.all.fslayoutspan.offsetHeight;
if (fslinks_height > MAX_HEIGHT) {
isScrolling = 1;
document.all.scrollupbuttonspan.style.display = "block";
document.all.scrolldownbuttonspan.style.display = "block";
if (canScrollUp)
enableScrollUp();
else
disableScrollUp();
if (canScrollDown)
enableScrollDown();
else
disableScrollDown();
}
else if (isScrolling) {
isScrolling = 0;
stopScroll();
resetMiddleRows(); //need this if user scrolled in the window
document.all.scrollupbuttonspan.style.display = "none";
document.all.scrolldownbuttonspan.style.display = "none";
}
document.location='flyswat:resizehtml';
}
//puts scrolling rows back to starting position
function resetMiddleRows() {
var numrows = document.all.middlerow.length;
if (numrows > 1) {
for (var i=0; i 1)
distanceScrolled = parseInt(document.all.middlerow[0].style.posTop);
else
distanceScrolled = parseInt(document.all.middlerow.style.posTop);
//only scroll if something is hidden above
if (distanceScrolled < 0)
return true;
else
return false;
}
function canScrollDown() {
var numrows = document.all.middlerow.length;
var distanceScrolled;
if (numrows > 1)
distanceScrolled = parseInt(document.all.middlerow[0].style.posTop);
else
distanceScrolled = parseInt(document.all.middlerow.style.posTop);
//only scroll if something is hidden above
if (distanceScrolled > (MAX_HEIGHT - parseInt(document.all.fslayoutspan.offsetHeight)))
return true;
else
return false;
}
function mousedownScrollUp(img) {
if (img.src == scrollUpNormal.src) {
img.src = scrollUpClick.src;
}
}
function mouseupScrollUp(img) {
if (img.src == scrollUpClick.src) {
img.src = scrollUpNormal.src;
}
}
function mousedownScrollDown(img) {
if (img.src == scrollDownNormal.src) {
img.src = scrollDownClick.src;
}
}
function mouseupScrollDown(img) {
if (img.src == scrollDownClick.src) {
img.src = scrollDownNormal.src;
}
}
function disableScrollUp() {
document.images['scrollupbutton'].src = scrollUpDisabled.src;
// document.all.scrollupbuttonspan.innerHTML = "
";
}
function disableScrollDown() {
document.images['scrolldownbutton'].src = scrollDownDisabled.src;
//document.all.scrolldownbuttonspan.innerHTML = "
";
}
function enableScrollUp() {
document.images['scrollupbutton'].src = scrollUpNormal.src;
// document.all.scrollupbuttonspan.innerHTML = "
";
}
function enableScrollDown() {
document.images['scrolldownbutton'].src = scrollDownNormal.src;
//document.all.scrolldownbuttonspan.innerHTML = "
";
}
function scrollUp() {
var numrows = document.all.middlerow.length;
var distanceScrolled;
if (numrows > 1)
distanceScrolled = parseInt(document.all.middlerow[0].style.posTop);
else
distanceScrolled = parseInt(document.all.middlerow.style.posTop);
//if can scroll up
if (distanceScrolled < 0) {
if (numrows > 1) {
for (var i=0; i 1)
distanceScrolled = parseInt(document.all.middlerow[0].style.posTop);
else
distanceScrolled = parseInt(document.all.middlerow.style.posTop);
//if can scroll down
if (distanceScrolled > (MAX_HEIGHT - parseInt(document.all.fslayoutspan.offsetHeight))) {
if (numrows > 1) {
for (var i=0; i" +
"" +
" |
" +
" |
";
return HTML;
}
//need to preload PopupTopRounded and PopupBottomRounded images, because of weirdness with IE4
var popupBottomHTML = "" +
" |
" +
"";
function assemblePopupTableHTML(insideHTML)
{
var HTML = popupTopHTML + insideHTML + popupBottomHTML;
return HTML;
}
var popupTopHTML = "" +
"" +
"" +
"" +
"" +
" " +
" | " +
"" +
"" +
" " +
" | " +
"";
//HTML of all link types under a given keyword (fscategories[cat].keywords[k])
function assembleLTListHTML(cat, k) {
var ltlistHTML = "";
with (fscategories[cat].keywords[k]) {
for (var l in linktypes) {
linktypes[l].initializeDisplayProperties(cat,k,l);
var statusText = name + " - " + linktypes[l].name;
if (linktypes[l].providers.length > 0)
statusText += " (provided by " + linktypes[l].providers[0].name + ")";
ltlistHTML += "";
}
}
return ltlistHTML;
}
function assembleProviderListHTML(cat, k, l) {
var provlistHTML = "";
var statusText;
with (fscategories[cat].keywords[k].linktypes[l]) {
for (var p in providers) {
providers[p].initializeDisplayProperties(cat,k,l,p);
statusText = fscategories[cat].keywords[k].name + " - " + fscategories[cat].keywords[k].linktypes[l].name + " (provided by " + providers[p].name + ")";
provlistHTML += "";
}
}
return provlistHTML;
}
//==============================================================
// Helper Functions
//===============================================================
//determine if browser is IE4
var agt=navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var using_ie4 = ((is_major == 4) && (agt.indexOf("msie 5.")==-1));
//txt must be escaped
function setStatusText(txt) {
//document.location="flyswat:setStatus(" + txt + ")";
}
function clearStatusText() {
//document.location="flyswat:setStatus()";
}
function hoverCatExpandImg(img) {
if (img.src == DownNormal.src) {
img.src = DownHover.src;
}
else if (img.src == UpNormal.src) {
img.src = UpHover.src;
}
}
function unhoverCatExpandImg(img) {
if (img.src == DownHover.src) {
img.src = DownNormal.src;
}
else if (img.src == UpHover.src) {
img.src = UpNormal.src;
}
}
function hoverLTExpandImg(img) {
if (img.src == PlusNormal.src) {
img.src = PlusHover.src;
}
else if (img.src == MinusNormal.src) {
img.src = MinusHover.src;
}
}
function unhoverLTExpandImg(img) {
if (img.src == PlusHover.src) {
img.src = PlusNormal.src;
}
else if (img.src == MinusHover.src) {
img.src = MinusNormal.src;
}
}
function assembleFSURL(cat, k, l, p)
{
with (fscategories[cat].keywords[k]) {
var catCode = categoryCode;
var ltType = linktypes[l].type;
var keyCode = code;
var keyMT = mt;
var provTag = "";
var bpID = fscategories[cat].bpID;
var bpRev = fscategories[cat].bpRev;
if (arguments.length == 4)
provTag = linktypes[l].providers[p].tag;
}
var fsurl = fslinksenviro.redURL + "?lt=" + safeEscape(ltType) +
"&cc=" + safeEscape(catCode) + "&kc=" + safeEscape(keyCode) +
"&pp=" + safeEscape(provTag) + "&r=" + safeEscape(fslinksenviro.requestID) +
"&m=" + safeEscape(keyMT) + "&sn=" + safeEscape(fssystemenviro.serialNum) +
"&dt=" + safeEscape(fslinksenviro.distTag) + "&bi=" + safeEscape(bpID) +
"&br=" + safeEscape(bpRev) + "&bp=";
if (fscategories[cat].boosterPackCategory) {
fsurl += "1";
}
else {
fsurl += "0";
}
return fsurl;
}
//------------------------------------------------------------
// function: safeEscape
// author: Leo
// comments: escape(str, 1) doesn't work!!
// And I can't get regex's to work
//------------------------------------------------------------
function safeEscape(str) {
escaped_str = escape(str);
if (escaped_str.indexOf("+") > -1) {
var arr = escaped_str.split("+");
escaped_str = arr.join("%2B");
}
return escaped_str;
}
//------------------------------------------------------------
// function: safeEscape2
// author: Mark
// comments: Had to implement because Javascript problem
// with variable names having '%' char in them
// so replacing with '$'.
//------------------------------------------------------------
function safeEscape2(str)
{
var iChar;
var iStrLen = str.length;
var newStr = "";
for (i = 0; i < iStrLen; i++)
{
iChar = str.charCodeAt(i);
if ((iChar < 48) || ((iChar > 57) && (iChar < 65)) || ((iChar > 90) && (iChar < 97)) || (iChar > 122))
{
newStr += "$" + iChar;
}
else
newStr += str.charAt(i);
}
return newStr;
}
//------------------------------------------------------------------
// Creates a global list of ID's
// A new ID is added for each new category, keyword, linktype,
// and provider, as well as at any other time.
//------------------------------------------------------------------
var globalIDList = new Array();
function setGlobalID(str) {
if (isMemberOf(str, globalIDList)) {
var i=1;
while (isMemberOf(str + i, globalIDList))
i += 1;
str = str + i;
}
globalIDList[globalIDList.length] = str;
return str;
}
//------------------------------------------------
// returns true if "element" is a member of
// "array", otherwise returns false
//------------------------------------------------
function isMemberOf(element, array)
{
for (var i=0; i < array.length; i++)
{
if (array[i] == element)
return true;
}
return false;
}
//==============================================================
// Show/Hide HTML Functions
//===============================================================
var showingProviderList = "";
function showhideProviderList(cat, k, l)
{
var lt = fscategories[cat].keywords[k].linktypes[l];
//closing an open provider list
if (lt.providerListShowing) {
lt.hideProviderList();
showingProviderList = "";
}
//opening a provider list
else {
//close the previously opened list
if (showingProviderList)
showingProviderList.hideProviderList();
lt.showProviderList(cat, k, l);
showingProviderList = lt;
}
if (FS_WINDOW_TYPE == "POPUP")
checkScrolling();
}
var showingLTList = "";
function showhideLTList(cat, k)
{
var keyword = fscategories[cat].keywords[k];
//closing an open lt list
if (keyword.ltListShowing) {
keyword.hideLTList();
if (FS_WINDOW_TYPE != "POPUP") {
showingLTList = "";
}
}
//opening a provider list
else {
keyword.showLTList(cat, k);
if (FS_WINDOW_TYPE != "POPUP") {
if (showingLTList)
showingLTList.hideLTList();
showingLTList = keyword;
}
}
if (FS_WINDOW_TYPE == "POPUP")
checkScrolling();
}
var showingKeyList = "";
function showhideKeyList(cat)
{
var category = fscategories[cat];
if (category.keyListShowing) {
category.hideKeyList();
showingKeyList = "";
}
else {
//close the previously opened list
if (showingKeyList)
showingKeyList.hideKeyList();
category.showKeyList(cat);
showingKeyList = category;
}
if (FS_WINDOW_TYPE == "POPUP")
checkScrolling();
}
//-----------------------------------------------------------------
// function: PutCatOnBottom
// author: Mark
// comments: Will take the fscategories array and put the
// category with "catcode" at the end of the array.
//-----------------------------------------------------------------
function PutCatOnBottom(catcode)
{
bSearchesNotFound = 1;
var cat = 0;
while ((cat < fscategories.length) && (bSearchesNotFound)) {
var catCode = fscategories[cat].keywords[0].categoryCode;
var iSearchesIndex = 0;
if (catCode == catcode) {
var searchCat = fscategories[cat];
bSearchesNotFound = 0;
iSearchesIndex = cat;
iSearchesIndex++;
for (var i = iSearchesIndex; i < fscategories.length; i++)
{
fscategories[i - 1] = fscategories[i];
}
fscategories[fscategories.length - 1] = searchCat;
}
cat++;
}
}
Flyswat Control Band
| |